package com.xm.xmapp.http;

import java.io.UnsupportedEncodingException;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkError;
import com.android.volley.NoConnectionError;
import com.android.volley.Response.ErrorListener;
import com.android.volley.ServerError;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
import com.xm.xmapp.app.CodeConstant;
import com.xm.xmapp.myinterface.DisssmissInterFace;
import com.xm.xmapp.tools.Tools;

public class GetDataErrorListener implements ErrorListener {

	private DisssmissInterFace in;
	private String data;

	public GetDataErrorListener(DisssmissInterFace in) {
		this.in = in;
	}

	// 以下是Volley的异常列表：
	// AuthFailureError：如果在做一个HTTP的身份验证，可能会发生这个错误。
	// NetworkError：Socket关闭，服务器宕机，DNS错误都会产生这个错误。
	// NoConnectionError：和NetworkError类似，这个是客户端没有网络连接。
	// ParseError：在使用JsonObjectRequest或JsonArrayRequest时，如果接收到的JSON是畸形，会产生异常。
	// SERVERERROR：服务器的响应的一个错误，最有可能的4xx或5xx HTTP状态代码。
	// TimeoutError:Socket超时，服务器太忙或网络延迟会产生这个异常。默认情况下，Volley的超时时间为2.5秒。如果得到这个错误可以使用RetryPolicy。
	public void onErrorResponse(VolleyError error, String data) {
		this.data = data;
		onErrorResponse(error);
	}

	@Override
	public void onErrorResponse(VolleyError error) {

		if (error != null)
			if (error instanceof TimeoutError) {
				Tools.showNetMessage("连接超时");
			} else if ((error instanceof ServerError) || (error instanceof AuthFailureError)) {
				Tools.showNetMessage("服务器错误");
				try {
					if (CodeConstant.Test) {
						String str = new String(error.networkResponse.data, "utf-8");
						Tools.saveServerError(str);
					}
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			} else if ((error instanceof NetworkError) || (error instanceof NoConnectionError)) {
				Tools.showNetMessage("网络不给力，请检查网络设置");
			}

		if (in != null) {
			if (error == null) {
				error = new MyVolleyError();
				((MyVolleyError) error).data = data;
			}
			try {
				in.putError(error);
				in = null;
			} catch (Exception e) {

			}
		}

	}

}
